/// 当前模块主要是为了验证可变性来说的
/// 
/// 

/// 不可变变量使用
fn f0() {
  let a = 1;
  // a = 2; // 不可变变量不能被修改
}

/// 可变变量使用
fn f1() {
  let mut a = 1;   
  a = 2;
}

/// 当同时使用可变变量与不可变变量时，需要注意引用规则
/// 
/// 1. 一个对象可以有多个引用
/// 2. 一个对象不能同时有多个可变引用
/// 3. 再同一个作用域内，如果已经不使用的可变引用，可以再次生命可变引用
///
fn f2() {
  let a = 1;
  let b = &a;
  let mut a1 = 1;
  // 下面这种情况是允许的，因为c声明了没有再次使用，可以理解为，再c2声明之前已经drop了
  let c = &mut a1;
  let c2 = &mut a1;
}
